/*
 * @(#)DocTime.java 1.00 08 Sep 2007
 *
 * Copyright (c) 2005-2007 Soluciones Info Móviles S.A.C.
 * Av. Javier Prado Oeste 203 - Piso 13, Lima 27, Perú.
 * Todos los derechos reservados.
 */

package sim.time;

import sim.framework.*;
import sim.framework.io.*;
import sim.utils.*;

/**
 * Documento que almacena la información de tiempo.
 *
 * @author      Omar Quintana
 * @since       1.0
 */
public final class DocTime extends Document implements FileGets {
    
    private int m_Time = -1;
    
    /**
     * Contructor.
     *
     * @param s Referencia a una intancia de la clase Simlet.
     *
     * @return
     */
    public DocTime(Simlet s) {
        super(s);
    }
    
    /**
     * Borra el archivo relacionado con el tiempo.
     *
     */
    public static void delete() {
        File.delete(FileNames.FILE_TIME);
    }
    
    /**
     *
     * Carga las preferencias de disco desde el archivo 
     * <code>FileNames.FILE_TIME</code>.
     *
     * @return  Devuelve <code>true</code> en caso de éxito, 
     *          en caso contrario <code>false</code>.
     */
    public boolean load() {
        FileStream file;
        // Abrimos el archivo
        file = (FileStream)FileStream.create(m_Simlet,
                FileNames.FILE_TIME,
                File.MODE_READ);
        if (file != null) {
            file.gets(this);
            file.close();
        }
        return isLoaded();
    }
    
    /**
     *
     * Almacena las preferencias en disco sobre el archivo 
     * <code>FileNames.FILE_TIME</code>.
     *
     *
     * @return  Devuelve <code>true</code> en caso de éxito, 
     *          en caso contrario <code>false</code>.
     */
    public boolean save() {
        FileStream file;
        // Abrimos el archivo
        file = (FileStream)FileStream.create(m_Simlet,
                FileNames.FILE_TIME,
                File.MODE_WRITE);
        if (file != null) {
            file.puts(String.valueOf(m_Time));
            file.close();
            return true;
        }
        return false;
    }
    
    public boolean fileGetsLine(final byte[] line, int size, int crlf) {
	if (size > crlf) {
	    try {
		m_Time = Integer.parseInt(new String(line, 0, size - crlf));
	    } catch (NumberFormatException e) {
		m_Time = 0;
	    }
	}
        return false;
    }
    
    /**
     * Determina si el documento ha sido cargado completamente.
     *
     * @return Devuelve true si fue cargado complemtamente, en caso contrario
     *         devuelve false.
     */
    public final boolean isLoaded() {
        return (m_Time != -1);
    }
    
    /**
     * Recupera el tiempo en segundos ingresado por el usuario.
     *
     * @return  segundos transcurridos desde 01/01/1970.
     */
    public final int getTime(){
        return m_Time;
    }

    /**
     * Establece el tiempo actual en segundos.
     *
     * @param   time    entero que contiene los segundos
     */
    public void setTime(int time){
        m_Time = time;
    }
    
    
}
